package com.zb.freemarker;


import com.google.common.collect.Maps;
import com.zb.freemarker.entity.Person;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 描述：<p>
 *
 * @author ZB
 * @version 1.0
 * @since 1.0
 */
public class Demo1 {

    public static void main(String[] args) throws Exception {
        // 简单替换
//        convert1();

        // 循环替换
        convert2();
        return;
    }

    private static void convert1() throws IOException, TemplateException {
        // 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是freemarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步：设置模板文件所在的路径。
        configuration.setDirectoryForTemplateLoading(new File("G:/ggg/tmpl"));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = configuration.getTemplate("person1.ftl");
        // 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
        Person person = new Person();
        //向数据集中添加数据
        person.setName("张三");
        person.setAge(18);
        person.setAddress("中国");
        person.setPhone("13612345678");
        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        Writer out = new FileWriter(new File("G:/ggg/1.txt"));
        // 第七步：调用模板对象的process方法输出文件。
        template.process(person, out);
        // 第八步：关闭流。
        out.close();
    }

    private static void convert2() throws IOException, TemplateException {
        // 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是freemarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步：设置模板文件所在的路径。
        configuration.setDirectoryForTemplateLoading(new File("G:/ggg/tmpl"));
        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步：加载一个模板，创建一个模板对象。
        Template template = configuration.getTemplate("person2.ftl");
        // 第五步：创建一个模板使用的数据集，可以是pojo也可以是map。一般是Map。
        Person person1 = new Person();
        //向数据集中添加数据
        person1.setName("张三");
        person1.setAge(18);
        person1.setAddress("中国");
        person1.setPhone("13612345678");

        Person person2 = new Person();
        //向数据集中添加数据
        person2.setName("李四");
        person2.setAge(30);
        person2.setAddress("美国");
        person2.setPhone("13677788899");

        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);

        HashMap<String, List<Person>> map = Maps.newHashMap();
        map.put("personList", list);

        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        Writer out = new FileWriter(new File("G:/ggg/2.txt"));
        // 第七步：调用模板对象的process方法输出文件。
        template.process(map, out);
        // 第八步：关闭流。
        out.close();
    }

}
